package top.goldenyear.porpoise.framework.common.exception.enums;

import top.goldenyear.porpoise.common.core.exception.ErrorCode;
import top.goldenyear.porpoise.common.core.exception.enums.GlobalErrorCode;

/**
 * 全局错误码枚举 0-999 系统异常编码保留
 *
 * <p>一般情况下，使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status 虽然说，HTTP
 * 响应状态码作为业务使用表达能力偏弱，但是使用在系统层面还是非常不错的 比较特殊的是，因为之前一直使用 0 作为成功，就不使用 200 啦。
 *
 * @author airhead
 */
public interface PorpoiseErrorCode {

  /** 重复请求 */
  // ========== 自定义错误段 ==========
  ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求，请稍后重试");

  ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式，禁止写操作");

  ErrorCode UNKNOWN = new ErrorCode(999, "未知错误");

  ErrorCode TOKEN_LOGOUT_ERROR = new ErrorCode(4001, "token 已登出");
  ErrorCode TOKEN_INVALID_ERROR = new ErrorCode(4003, "token 无效");
  ErrorCode TOKEN_TIMEOUT_ERROR = new ErrorCode(4005, "token 已过期");

  /**
   * 是否为服务端错误，参考 HTTP 5XX 错误码段
   *
   * @param code 错误码
   * @return 是否
   */
  static boolean isServerErrorCode(Integer code) {
    return code != null
        && code >= GlobalErrorCode.INTERNAL_SERVER_ERROR.getCode()
        && code <= GlobalErrorCode.INTERNAL_SERVER_ERROR.getCode() + 99;
  }
}
